/*
 * Clase encargada de dibujar un circuo en el lienzo
 */
package UI;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.geom.Ellipse2D.Double;


/**
 *
 * @author Marco
 */
public class Circulo  {
   
    int x,y,numeroNodo;//posicion en x, y y numero de nodo
    Image image;
    int peso;
    Ellipse2D.Double circulo;
   public  static  int autoIncrementable =0;
   
  

    public Circulo(int x, int y) {
        this.numeroNodo=Circulo.autoIncrementable++;
        this.x=x;
        this.y=y;
        peso=-1;
        
   
     
        //image = new ImageIcon(getClass().getResource("../Imagenes/esfera.png")).getImage();
    }
    /*este metodo lo utilizo para resetar el auto incremetno, par acuadno porjemplo creo un nuevo
     * graof pero el programa no se cerro , y queda en memoria el autoincremento
     */
     public static void resetearAutoincremento(){
         Circulo.autoIncrementable=0;
       
       }
/**
 * Este metodo dibuja un circulo, luego es llamado desde el lienzo
 * logrando asi dibujar un circulo en el lienzo
 * @param g
 * @param l 
 */
    public void painter(Graphics g,Lienzo l) {
            
        
          
            //g.drawImage(image, x-15, y-15, l);
            g.setColor(Color.RED);
           // g.drawOval(x-15, y-15, 25, 25);
            
            g.fillOval(x-15, y-15, 30, 30);
            g.setColor(Color.BLUE);
            //dibujo el peso del nodo 
            g.drawString(""+numeroNodo, x-15, y-15);
            g.drawString(""+numeroNodo, x-14, y-14);
            g.setColor(Color.BLACK);
            //Dibujo el numero de nodo en el centro
            if(peso!=-1)
            g.drawString(""+peso, x-2, y+4);
            
        }
    
    /**
     * constructor repetido para acepte por parametro un lienzo Dirigido
     * @return 
     */
     public void painter(Graphics g,LienzoDirigido l) {
            
        
         
             Graphics2D g2 = (Graphics2D) g;
            //g.drawImage(image, x-15, y-15, l);
            g2.setColor(Color.RED);
           // g.drawOval(x-15, y-15, 25, 25);
            g2.fillOval(x-15, y-15, 30, 30);
            g2.setColor(Color.BLUE);
            //dibujo el peso del nodo 
            g2.drawString(""+numeroNodo, x-15, y-15);
            g2.drawString(""+numeroNodo, x-14, y-14);
            g2.setColor(Color.BLACK);
            //Dibujo el numero de nodo en el centro
            if(peso!=0)
            g2.drawString(""+peso, x-2, y+4);
            
        }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    /**
     * este metodo se crea para asignarle un numero
     * ya que no se autogenera se saca del xml
     * @param numero 
     */
    public void setNumeroNodo(int numero){
     this.numeroNodo=numero;
    }
    public int getNumeroNodo() {
        return numeroNodo;
    }
    
    public void transladar(int dx,int dy) {
        this.x+=dx; this.y+=dy;
    }

    public void setImage(Image image) {
        this.image = image;
    }
    
    public void setPeso(int pesoNuevo){
      peso=pesoNuevo;
    }
    public int getPeso(){
     return peso;
    }

    public boolean jaladopor(Point d) {
        if(d.distance(x, y)<=15) {
            return true;
        }
         else {
                return false;
         }
    }
/* pequeña explciaicon  con mtodo trasladar le seteo nuevas x e y al circulo
 * y asi al llamar a repaint simulo el dragged.. terminar de entender
 */

 

}
